'use strict';

// 引入相关的模块
const { Sequelize, DataTypes } = require('sequelize');
const fs = require('fs');

// 初始化一个实例
let db = new Sequelize('db1', 'root', 'root', {
    host: 'localhost',
    dialect: 'mysql'
});

// 定义函数，任务是查找所有的模型文件
function findModel(path) {
    path = path || './model';
    let files = fs.readdirSync(path);
    return files.filter(item => {
        return item.endsWith('.js') && item !== 'index.js';
    })
}

let obj = {};

// 定义函数，任务是批量定义模型
function defineModel(files) {
    files.forEach(item => {
        let tmpModel = require('../model/' + item);
        let modelName = item.replace('.js', '');
        let lowModelName = modelName.toLowerCase();

        obj[modelName] = db.define(lowModelName, tmpModel, {
            tableName: 'app_' + lowModelName
        })
    });
}

// 调用相应函数，查找所有的模型文件，并且遍历之，批量定义之
let files = findModel();
defineModel(files);

// 给将要暴露出去的对象挂载一个方法，方法用于同步模型到数据库
obj.sync = async function (force) {
    if (force) {
        return db.sync({ force: true })
    }
    return db.sync()
}
// 暴露那个对象
module.exports = obj;
